/**************************************************************************
 * @file s2t.c
 * @author BryanHe(贺璧) (532352406@qq.com)
 * @brief 实现简体中文转繁体
 * @version 0.1
 * @date 2025-06-08
 * 
 * @copyright Copyright (c) 2025
 * 
 *************************************************************************/
#include "s2t.h"

CharMap charMap[MAX_MAP_SIZE];
int mapSize = 0;

// 加载简体-繁体映射表
int LoadConversionMap(const char* filename) {
    FILE* file = fopen(filename, "r, ccs=UTF-8");
    if (!file) {
        fwprintf(stderr, L"错误：无法打开映射文件 %hs\n", filename);
        return 0;
    }

    wchar_t line[MAX_LINE_LEN];
    while (fgetws(line, MAX_LINE_LEN, file)) {
        if (line[0] == L'#' || wcslen(line) < 3) continue; // 跳过注释和空行
        
        wchar_t simple, traditional;
        if (swscanf_s(line, L"%lc\t%lc", &simple,(unsigned)sizeof(simple), &traditional,(unsigned)sizeof(traditional)) == 2) {
            charMap[mapSize].simple = simple;
            charMap[mapSize].traditional = traditional;
            mapSize++;
            
            if (mapSize >= MAX_MAP_SIZE) {
                fwprintf(stderr, L"警告：达到最大映射表容量\n");
                break;
            }
        }
    }
    
    fclose(file);
    wprintf(L"已加载 %d 个简繁转换规则\n", mapSize);
    return 1;
}

// 转换简体字符串到繁体 (返回新分配的字符串)
wchar_t* ConvertToTraditional(const wchar_t* input) {
    if (!input) return NULL;
    
    // 创建字符串副本用于转换
    size_t len = wcslen(input);
    wchar_t* result = (wchar_t*)malloc((len + 1) * sizeof(wchar_t));
    if (!result) return NULL;
    
    wcscpy_s(result, len + 1, input);
    
    // 遍历字符串的每个字符
    for (size_t i = 0; i < len; i++) {
        // 在映射表中查找匹配的简体字符
        for (int j = 0; j < mapSize; j++) {
            if (result[i] == charMap[j].simple) {
                result[i] = charMap[j].traditional;
                break;  // 找到匹配后跳出内层循环
            }
        }
    }
    
    return result;
}

int test_main() {
    // 设置本地化支持中文
    _wsetlocale(LC_ALL, L"zh-CN");
    
    // 加载转换映射表（确保此文件与程序同目录）
    if (!LoadConversionMap("STCharacters.txt")) {
        return 1;
    }

    // 示例输入
    const wchar_t* input = L"这是一个简体中文转换示例：软件、硬件、鼠标、光盘";
    wprintf(L"输入字符串：%ls\n", input);
    
    // 执行转换
    wchar_t* output = ConvertToTraditional(input);
    if (output) {
        wprintf(L"转换结果：%ls\n", output);
        free(output);  // 释放分配的内存
    } else {
        wprintf(L"转换失败\n");
    }
    
    return 0;
}


int s2t_init(void) {
    // 设置本地化支持中文
    _wsetlocale(LC_ALL, L"zh-CN");
    
    // 加载转换映射表（确保此文件与程序同目录）
    if (!LoadConversionMap("STCharacters.txt")) {
        return 1;
    }

    // // 示例输入
    // const wchar_t* input = L"这是一个简体中文转换示例：软件、硬件、鼠标、光盘";
    // wprintf(L"输入字符串：%ls\n", input);
    
    // // 执行转换
    // wchar_t* output = ConvertToTraditional(input);
    // if (output) {
    //     wprintf(L"转换结果：%ls\n", output);
    //     free(output);  // 释放分配的内存
    // } else {
    //     wprintf(L"转换失败\n");
    // }
    
    return 0;
}